# 得到网站的网页内容
import multiprocessing
import os
import re
from _operator import mul
from urllib.request import *

import numpy
import gevent

from  gevent import monkey

# 打上补丁
monkey.patch_all()


# 下载图片
def down_image(image_url, save_url):
	# 下载图片
	# response = urlopen(image_url)
	# content = response.read()

	# # 模块头
	headers = {
		"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}

	# 得到请求的对象
	req = Request(image_url, headers=headers)
	# 通过请求的对象打开内容
	response = urlopen(req)

	content = response.read()

	with open(save_url, 'wb') as f:
		f.write(content)


# 下载协程
def gevent_down(images_down, save_count):
	# 等待的列表
	gevent_list = list()

	# 当前的个数
	count = 1
	# 图片的列表,一个图片开一个协程进行下载
	for image_url in images_down:
		print(image_url)
		save_url = "./images/%s-%s.jpg" % (save_count, count)
		count += 1
		g_down = gevent.spawn(down_image, image_url, save_url)
		gevent_list.append(g_down)

	gevent.joinall(gevent_list)


def main():
	"""得到爬虫的网页内容"""

	# 下载图片地址
	image_down_url = "https://www.douyu.com/g_yz"

	# 模块头
	headers = {
		"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}

	# 得到请求的对象
	req = Request(image_down_url, headers=headers)
	# 通过请求的对象打开内容
	response = urlopen(req)
	# 读取内容
	content = response.read().decode("utf-8")

	# 得到图片地址通过正则
	# data-original="https://rpic.douyucdn.cn/live-cover/appCovers/2018/07/25/3874207_20180725222956_big.jpg"

	# 得到图片的地址
	image_list = re.findall(r'data-original="(https://.+\.jpg)"', content)

	# 为了cpu效率,一个cpu一个进程,进程内开相同数据的协程进行下载
	# 得到cpu核数
	cpu_count = os.cpu_count()

	# 对到对应的cpu核数的下载数量
	images = numpy.array_split(image_list, cpu_count)

	print(images)

	for count in range(cpu_count):
		# 开进程下载
		multiprocessing.Process(target=gevent_down, args=(images[count], count)).start()


if __name__ == '__main__':
	main()
